// 运行时配置
import { RequestConfig, RunTimeLayoutConfig } from '@umijs/max';
import { message } from 'antd';
import './global.less';
import { history } from 'umi';

// 全局初始化数据配置，用于 Layout 用户信息和权限初始化
// 更多信息见文档：https://umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState(): Promise<{
  name: string;
  avatar?: string;
}> {
  return {
    name: '11111',
    avatar:
      'https://github.com/XiaoRongwen/imgs/blob/master/avatar.jpg?raw=true',
  };
}

export const layout: RunTimeLayoutConfig = ({ initialState }) => {
  //initialState上面登录函数返回的信息
  return {
    logo: null, //左上角Logo
    title: '管理后台', //左上角Logo后面的名字
    menu: {
      locale: false, //菜单是否国际化
    },
    layout: 'side', //菜单的方式，有mix,top,side三种，这里用mix
    splitMenus: true, // 这里用了mix才会生效,bia
    // menuHeaderRender: ,
    avatarProps: {
      src: initialState?.avatar || undefined, //右上角头像
      title: initialState?.name || '用户', //右上角名称
    },
    token: {
      //菜单的样式配置
      //   colorBgAppListIconHover: 'rgba(0,0,0,0.06)',
      //   colorTextAppListIconHover: 'rgba(255,255,255,0.95)',
      //   colorTextAppListIcon: 'rgba(255,255,255,0.85)',
      bgLayout: 'rgba(243, 246, 255, 1)', // layout 的背景颜色
      sider: {
        //侧边菜单的配置 ，这里具体看文档
        colorBgCollapsedButton: '#fff', // 展开收起按钮背景颜色
        // colorTextCollapsedButtonHover: '#969AB0', // 展开收起按钮 hover 时字体颜色
        colorTextCollapsedButton: 'rgba(0,0,0,0.45)', // 展开收起按钮字体颜色
        colorMenuBackground: 'rgba(18, 19, 54, 1)', // menu 的背景颜色
        // colorBgMenuItemCollapsedElevated: 'red',// 收起 menuItem 的弹出菜单背景颜色
        colorMenuItemDivider: 'rgba(18, 19, 54, 1)', // menuItem 分割线的颜色
        colorBgMenuItemHover: 'rgb(90,92,178)', // menuItem 的 hover 背景颜色
        colorBgMenuItemSelected: 'rgb(90,92,178)', // menuItem 的选中背景颜色
        colorTextMenuSelected: '#fff', // menuItem 的选中字体颜色
        colorTextMenuItemHover: '#fff', // menuItem 的 hover 字体颜色
        colorTextMenu: '#969AB0', // menuItem 的字体颜色
        colorTextMenuSecondary: 'rgba(255,255,255,0.65)', // menu 的二级字体颜色，比如 footer 和 action 的 icon
        colorTextMenuTitle: 'rgba(255,255,255,0.95)', // sider 的标题字体颜色
        colorTextMenuActive: '#1677ff', // menuItem hover 的选中字体颜色
        colorTextSubMenuSelected: '#1677ff',
      },
      header: {
        colorBgHeader: 'red',
        colorTextRightActionsItem: 'red',
      },
    },
  };
};
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  405: '请求方法不被允许。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};
 
// 全局请求
const requestInterceptor = (url, options) => {
  console.log(111,url)
  return {
    url:  url, // 此处可以添加域名前缀
    options: {
      ...options,
      headers: {
        authorization: 'Bearer',
      },
    },
  };
};
 
// 全局相应拦截
const responseInterceptor = (response, options) => {
  console.log('返回了');
  return response;
};

export const request: RequestConfig = {
  timeout: 1000,
  // other axios options you want
  errorConfig: {
    errorHandler(error: any) {
      console.log(23,error)
      const { response } = error;
      if (response && response.status === 500) {
        // message.error('请求错误：服务器故障，请稍后再试');
      }
      if(response && response.status == 401){
        // message.error('请求重新登录后再试');
        setTimeout(()=>{
          history.push('/login');
        },1000)
      }
    },
    requestInterceptors: [requestInterceptor],
    responseInterceptors: [responseInterceptor],
    errorThrower() {},
  },
  // 请求拦截
  requestInterceptors: [
    (config: any) => {
      console.log(43,config)
      let token = localStorage.getItem('token') || '';
      if (token.startsWith('"')) {
        token = JSON.parse(token);
      }
      if (token) {
        config.headers.Authorization = 'Bearer ' + token;
      }
      return config;
    },
    (error: any) => {
      console.log(33,error)
      return error;
    },
  ],
  // 相应拦截
  responseInterceptors: [
    (response: any) => {
      const { data } = response;
      if (data.code==-1) {
        setTimeout(()=>{
          history.push('/login');
        },1000)
      }
      return response;
    },
  ],
};
